home *** CD-ROM | disk | FTP | other *** search
- unit svrPageHandler;
-
- interface
-
- uses
- Classes, mleSMLContainer, mleCommon, UHTTPApp;
-
- type
- TPageHandler = class(TComponent)
- protected
- PageProducer: TUSPageProducer; { component to parse template }
- SMLContainer: TSMLContainer; { Resolver for a block of SML tags }
- procedure OnScriptingBlock(aSender: TObject; aBody: string; var aReplaceText: string);
- function GetSMLScripts: string;
- function GetSMLVars: string;
- procedure LoadPageTemplate(aPageName: string);
- function ResolveSML(aSML: string): string;
- public
- constructor Create(aOwner: TComponent; aPacket: TInfoPacket); reintroduce; virtual;
- destructor Destroy; override;
- function GetContent: string;
- end;
-
- implementation
-
- uses
- SysUtils, svrMain;
-
- { TPageHandler }
-
- constructor TPageHandler.Create(aOwner: TComponent; aPacket: TInfoPacket);
- begin
- inherited Create(aOwner);
- PageProducer := TUSPageProducer.Create(Self);
- PageProducer.OnScriptingBlock := OnScriptingBlock;
- SMLContainer := TSMLContainer.Create(aPacket);
- end;
-
- destructor TPageHandler.Destroy;
- begin
- SMLContainer.Free;
- inherited;
- end;
-
- function TPageHandler.GetContent: string;
- begin
- LoadPageTemplate(SMLContainer.Variables.Values['PI:PAGE']);
- Result := PageProducer.Content;
- Result := StringReplace(Result, '<SMLVars>', GetSMLVars, [rfIgnoreCase]);
- Result := StringReplace(Result, '<SMLScripts>', GetSMLScripts, [rfIgnoreCase]);
- end;
-
- function TPageHandler.GetSMLScripts: string;
- var
- I: Integer;
- List: TStringList;
- begin
- List := TStringList.Create;
- try
- List.Add('<SCRIPT>');
- with SMLContainer.Scripts do
- for I := 0 to Count - 1 do
- List.Add(Values[Names[I]]);
- List.Add('');
- List.Add('</SCRIPT>');
- Result := List.Text;
- finally
- List.Free;
- end;
- end;
-
- function TPageHandler.GetSMLVars: string;
- var
- S: string;
- begin
- Result := '';
- S := SMLContainer.DataBindings.GetAsXML;
- if S <> '' then
- Result := Result + #13#10 +
- '<INPUT type=hidden name=SMLDataBindings value=''' + S + '''>';
- end;
-
- procedure TPageHandler.LoadPageTemplate(aPageName: string);
- var
- Filename: string;
- begin
- Filename := ExpandFileName(frmMain.edtTemplatePath.Text + aPageName);
- if not FileExists(Filename) then
- raise Exception.CreateFmt('File does not exist: %s', [Filename]);
- PageProducer.HTMLFile := Filename;
- end;
-
- procedure TPageHandler.OnScriptingBlock(aSender: TObject; aBody: string;
- var aReplaceText: string);
- begin
- aReplaceText := ResolveSML(aBody);
- end;
-
- function TPageHandler.ResolveSML(aSML: string): string;
- begin
- Result := '';
- with SMLContainer do
- begin
- SML := '<SML>' + aSML + '</SML>';
- Resolve;
- Result := Trim(HTML.Text);
- end;
- end;
-
- end.
-